---
title: Creating nodes
---

<Tip> While we are growing the list of built-in nodes, we will also be providing a space for you to submit your own nodes for others to use without shipping that as a a part of the framework. Check out our [Roadmap](https://github.com/orgs/deskree-inc/projects/4/views/2) for more information. </Tip>

# **Guide to Contributing Built-in Nodes in Blok **
<Tip> Make sure you follow the recommendations on how to set up local environment and steps to complete before committing your changes. To learn more [visit](/docs/c/overview/how-to-contribute)</Tip>

Built-in nodes are **predefined, reusable nanoservices** that provide common functionality for workflows. This guide explains how to create, test, and contribute new built-in nodes to the framework.

---

## **What Are Built-in Nodes?**  
Nodes are the **smallest executable units** in `Blok` workflows. They perform specific tasks, such as:  
- **API Requests** (e.g., fetch data from an external service) <Icon icon="check" iconType="solid" />  
- **Data Transformation** (e.g., JSON parsing, filtering, formatting)  
- **Database Operations** (e.g., Postgres queries)  
- **Messaging & Events** (e.g., sending messages to Kafka, RabbitMQ)  

Nodes are stored in the `/nodes` directory and can be reused across multiple workflows.

---

## **Getting Started**
Clone the repository and navigate to the `nodes` directory:  
```bash
git clone https://github.com/deskree-inc/blok.git
cd nodes
```

---

## **Adding a New Built-in Node**
1. Create a new directory in `/nodes`  
2. Use any existing nodes as a starting template or build your own  
3. Make sure you are using the [NanoService class](/docs/ref/runner/src/classes/NanoService) as the base class
4. Document your code, create interface definitions, and make sure you follow ESlint rules
5. Make sure you have tests for your trigger and you achieve full coverage after running `pnpm test`
6. Add `config.json` file describing your node use and structure. For more information, visit [config.json](/docs/d/core-concepts/nodes#configuration-config-json)

---

## **Submitting a Pull Request**
1. **Follow Branch Naming Convention**  
   ```bash
   git checkout -b feature/add-my-new-node
   ```
2. **Ensure Code Quality**  
   ```bash
   npm run lint
   npm test
   ```
3. **Submit a PR** with:  
   - A **clear description** of the node.  
   - Tests and configuration examples.  
   - Proper **documentation** updates.  

---

## **Best Practices**
✅ **Keep nodes lightweight and efficient.**  
✅ **Ensure proper error handling and logging.**  
✅ **Write clear documentation and tests.**  
✅ **Follow the project's TypeScript style guide.**  

---

## **Final Notes**
Built-in nodes **simplify workflow development** and improve code reusability in `Blok`. By contributing new nodes, you help expand the framework’s capabilities. If you have any questions, open an issue or join the discussion! 🚀  
```